<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>await</title>
</head>
<body>
    <script>
        /***
         * 
         *   await 表达式
         *   1. await 右侧的表达式一般为 promise 对象, 但也可以是其它的值
         *   2. 如果表达式是 promise 对象, await 返回的是 promise 成功的值
         *   3. 如果表达式是其它值, 直接将此值作为 await 的返回值
         * 
         *   注意
         *   1. await 必须写在 async 函数中, 但 async 函数中可以没有 await
         *   2. 如果 await 的 promise 失败了, 就会抛出异常, 需要通过 try...catch 捕获处理
         *   
         *   
         */


         //await 必须写在 async 函数中,
         //await 10; //报错:Uncaught SyntaxError: await is only valid in async functions and the top level bodies of modules


         async function main(){

            let p=new Promise((resovle,reject)=>{
                // resovle('OK');
                reject('Error');
            });

             //1.右侧为Promise的情况
             //let res=await p; //await 返回的是 promise 成功的值
             //console.log(res); //OK

             //2.如果右侧为其他类型的值,直接将此值作为 await 的返回值
             //let res2=await 20;
             //console.log(res2); //20

             //3.如果Promise是一个失败的状态,会抛出错误,我们可以用try...catch捕获
             try{
                let res3=await p;
             }catch(e){
                console.log(e);
             }
             

             
         }

         main();         

    </script>
</body>
</html>